<?php

namespace app\admin\controller;

use app\admin\common\controller\Common;
use app\common\model\CarouselFigure as CarouselFigureModel;
use think\Request;
use think\Validate;

// 导航栏
class CarouselFigure extends Common
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        // 获取全部数据
        $datas = CarouselFigureModel::order('sorting', 'desc')->paginate(10);

        // 获取分页显示
        $page = $datas->render();

        // 模板变量赋值
        $this->assign(['datas' => $datas, 'page' => $page]);

        // 视图渲染
        return view();
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        // 保存Post数据
        $post = $request->post();

        // 创建验证
        $validate = Validate::make([
            'img' =>  'require'
        ]);

        // 判断验证是否成功
        if ($validate->check($post)) {  // 成功
            // 获取数据数量
            $count = CarouselFigureModel::count();
            
            // 设置排序
            $post['sorting'] = ++$count;
            
            // 新增数据
            $result = CarouselFigureModel::create($post, true);

            // 返回Json数据
            return $result ? json(['message' => '添加成功', 'type' => 'success', 'state' => 200]) : json(['message' => '添加失败', 'type' => 'success', 'state' => 400]);
        } else {    // 失败
            // 抛出错误信息
            throw new \Exception($validate->getError());
        }
    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        // 获取单个数据
        $data = CarouselFigureModel::get(array($id));

        // 返回Json数据
        return $data ? json(['data' => $data, 'message' => '获取数据成功', 'type' => 'success', 'state' => 200]) : json(['data' => $data, 'message' => '获取数据失败', 'type' => 'error', 'state' => 400]);
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        // 保存Put数据
        $put = $request->put();

        // 创建验证
        $validate = Validate::make([
            'url' =>  'url'
        ]);

        // 创建验证数据
        $data = ['url' => $put['url']];

        // 判断验证是否成功
        if ($validate->check($data)) {  // 成功
            // 设置更新条件
            $put['id'] = $id;

            // 更新数据
            $result = CarouselFigureModel::update($put, true);

            // 返回Json数据
            return $result ? json(['message' => '更新成功', 'type' => 'success', 'state' => 200]) : json(['message' => '更新失败', 'type' => 'error', 'state' => 400]);
        } else {    // 失败
            // 抛出错误信息
            throw new \Exception($validate->getError());
        }
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        // 获取数据
        $datas = CarouselFigureModel::all(addslashes($id));
        // 删除数据
        $result = CarouselFigureModel::destroy(addslashes($id));

        // 循环数据
        foreach ($datas as $data) {
            // 判断是否存在图片/如果存在 删除图片
            if (isset($data['img'])) unlink('./uploads/carousel_figure/' . $data['img']);
        }

        // 返回Json数据
        return $result ? json(['message' => '删除成功', 'type' => 'success', 'state' => 200]) : json(['message' => '删除失败', 'type' => 'error', 'state' => 400]);
    }

    /**
     * 保存更新的排序
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update_sorting(Request $request, $id)
    {
        // 保存Put数据
        $put = $request->only('sorting', 'put');

        // 设置更新条件
        $put['id'] = $id;

        // 更新数据
        $result = CarouselFigureModel::update($put, true);

        // 返回Json数据
        return $result ? json(['message' => '更新排序成功', 'type' => 'success', 'state' => 200]) : json(['message' => '更新排序失败', 'type' => 'error', 'state' => 400]);
    }

    /**
     * 保存更新的状态
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update_status(Request $request, $id)
    {
        // 保存Put数据
        $put = $request->only('status', 'put');

        // 设置更新条件
        $put['id'] = $id;

        // 更新数据
        $result = CarouselFigureModel::update($put, true);

        // 返回Json数据
        return $result ? json(['message' => '更新状态成功', 'type' => 'success', 'state' => 200]) : json(['message' => '更新状态失败', 'type' => 'error', 'state' => 400]);
    }

    /**
     * 上传
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function upload(Request $request)
    {
        // 获取表单上传文件
        $file = $request->file('file');

        // 验证
        $validate = $this->validate([
            'img' => $file
        ], 'app\admin\validate\CarouselFigure');

        // 判断是否验证成功
        if ($validate === true) {   // 成功
            // 移动到框架应用根目录/uploads/admin/carousel_figure 目录下
            $info = $file->rule('uniqid')->move('./uploads/carousel_figure', true, false);

            // 判断是否上传成功
            if ($info) {    // 上传成功
                // 保存Post数据
                $post = $request->post();
                
                // 判断是否存在旧图片/如果存在 删除图片
                if (isset($post['old_img'])) unlink('./uploads/carousel_figure/' . $post['old_img']);

                // 返回Json数据
                return json(['fileName' => $info->getFilename(), 'message' => '上传图片成功', 'type' => 'success', 'state' => 200]);
            } else {    // 上传失败
                // 返回Json数据
                return json(['message' => '上传图片失败', 'type' => 'error', 'state' => 400]);
            }    
        } else {    // 失败
            // 抛出错误信息
            throw new \Exception($validate);
        }
    }
}
